In many systems in which streams of data share an arrival medium, such as frame relay traffic streams arriving on different channels of a shared T1 line or Asynchronous Transfer Mode (ATM) traffic streams arriving from a shared ATM switch fabric, the traffic streams share a common buffer pool. In such a system the possibility exists for one of the traffic streams to request and use all of the available free buffers while starving the remaining traffic streams and precluding some data streams from obtaining buffers. One channel can thus consume all the available free buffers and prevent the remaining channels from obtaining free buffers that they may require. Accordingly, performance of the remaining channels as well as performance of the system as a whole may suffer. It would be desirable to provide a system wherein a single data stream is not allowed to allocate more than its share of free buffers and the remaining channels are not prevented from obtaining free buffers for their respective applications in accordance with defined limits for the respective data stream. Additionally, it would be desirable to provide a system which allocates free buffers to the data streams in an efficient and fair manner.